#ifndef BASECOMMAND_H
#define BASECOMMAND_H

#include <QObject>
#include <QString>
#include <QNetworkRequest>
#include <QNetworkReply>

class BackendService;
class DatabaseManager;
class QNetworkAccessManager;

// BaseCommand 基类
// 所有 Command 类的基类，提供通用功能
class BaseCommand : public QObject
{
    Q_OBJECT

public:
    explicit BaseCommand(QObject *parent = nullptr);
    virtual ~BaseCommand();
    
    // 设置 BackendService 实例
    void setBackendService(BackendService *backendService);
    
    // 设置 QNetworkAccessManager 实例
    void setNetworkAccessManager(QNetworkAccessManager *networkManager);
    
    // 设置 DatabaseManager 实例
    void setDatabaseManager(DatabaseManager *databaseManager);

protected:
    // 添加 token 到请求头（通用方法）
    void addTokenToRequest(QNetworkRequest &request, const QString &accessToken);
    
    // 创建网络请求（支持各种 HTTP 方法）
    QNetworkRequest createRequest(const QString &url, const QString &method, const QString &userAgent = "");
    
    // 获取 baseUrl（通用方法）
    QString getBaseUrl() const;
    
    // 检查并获取 accessToken，如果没有则尝试获取
    // 返回：是否已有 accessToken（true 表示已有，false 表示正在获取中）
    bool ensureAccessToken();
    
    // 检查对象是否仍然有效
    bool isValid() const;

protected:
    BackendService *m_backendService;
    QNetworkAccessManager *m_networkManager;
    DatabaseManager *m_databaseManager;
    bool m_isWaitingForToken; // 是否正在等待 accessToken

private slots:
    // 处理 AccessToken 获取完成信号（内部实现）
    void handleExchangeAccessTokenCompleted(int resultCode, const QString &message, const QString &accessToken);
};

#endif // BASECOMMAND_H

